package model

// User 用户信息模型
// @Description 用户详细信息，包含账号、密码等个人信息
type User struct {
	Model
	// 用户账号，用于登录系统
	Account string `json:"account" form:"account" gorm:"size:50;comment:账号;uniqueIndex" binding:"required" example:"user123"`
	// 用户密码，用于身份验证
	Password string `json:"password" form:"password" gorm:"size:255;comment:密码" binding:"required" example:"Password123"`
	// 邮箱，绑定账号，验证账号
	Email string `json:"email" form:"email" gorm:"size:100;comment:邮箱;uniqueIndex" binding:"email" example:"user@example.com"`
	// 验证码，用于注册或重置密码
	VerifyCode string `json:"verifyCode" form:"verifyCode" gorm:"size:6;comment:验证码" example:"123456"`
	// 用户昵称，用于展示
	NickName string `json:"nickName" form:"nickName" gorm:"size:20;comment:用户昵称" example:"张三"`
	// 用户真实姓名
	Name string `json:"name" form:"name" gorm:"size:20;comment:用户名称" example:"张三丰"`
	// 用户头像URL地址
	Avatar string `json:"avatar" form:"avatar" gorm:"size:500;comment:用户头像" example:"https://example.com/avatar.jpg"`
	// 用户年龄
	Age int16 `json:"age" form:"age" gorm:"comment:年龄" example:"25"`
	// 邀请人的用户ID
	InviteId int `json:"inviteId" form:"inviteId" gorm:"comment:邀请人Id" example:"1001"`
	// 用户专属邀请码，用于邀请其他用户注册
	InviteCode string `json:"inviteCode" form:"inviteCode" gorm:"size:50;comment:用户自己的邀请码" example:"INVITE123"`
	// 用户登录失败次数，用于安全控制
	LoginAttempts int `json:"loginAttempts" form:"loginAttempts" gorm:"comment:登录失败次数" example:"0"`
	// 最近登录时间，Unix时间戳
	LoginTime int32 `json:"loginTime" form:"loginTime" gorm:"comment:登录时间" example:"1617235200"`
	// 用户最近登录IP地址
	Ip string `json:"ip" form:"ip" gorm:"size:50;comment:登录ip" example:"127.0.0.1"`
	// 手机号码
	Mobile string `json:"mobile" form:"mobile" gorm:"size:20;comment:手机号码;uniqueIndex" example:"13812345678"`
	// 性别（0:未知 1:男 2:女）
	Gender int8 `json:"gender" form:"gender" gorm:"default:0;comment:性别(0未知 1男 2女)" example:"1"`
	// 部门ID
	DeptId int `json:"deptId" form:"deptId" gorm:"comment:部门ID" example:"1"`
	// 用户状态（0:正常 1:停用）
	Status int8 `json:"status" form:"status" gorm:"default:0;comment:用户状态(0正常 1停用)" example:"0"`
	// 是否启用自动登录功能
	AutoLogin bool `json:"autoLogin" form:"autoLogin" gorm:"default:false;comment:是否自动登录" example:"false"`
	// 用户身份验证令牌
	Token string `json:"token" form:"token" gorm:"size:255;comment:用户的身份令牌" example:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."`
	// 用户拥有的角色ID
	RoleId int `json:"roleId" form:"roleId" gorm:"comment:主角色ID" example:"1"`
	// 用户拥有的主角色
	Role Role `json:"role" gorm:"-"`
	// 用户拥有的角色列表
	Roles []Role `json:"roles" gorm:"-"`
}

// UserRole 用户角色关联模型
// @Description 用户和角色的多对多关联
type UserRole struct {
	Model
	// 用户ID
	UserId int `json:"userId" gorm:"index;comment:用户ID" example:"1"`
	// 角色ID
	RoleId int `json:"roleId" gorm:"index;comment:角色ID" example:"1"`
}

func (User) TableName() string {
	return "sys_user"
}

func (UserRole) TableName() string {
	return "sys_user_role"
}
